package org.iamd.security;

/**
 * VO за ресурс подлежащ на филтрация.
 * 
 * @author И. Атанасов
 */
public class SecuredResource {

	/** Идентификатор на ресурс. */
	private Object objId;

	/** Тип на ресурс. */
	private ISecuredObjTypes objType;

	/**
	 * Инициализация на съответните полета
	 * 
	 * @param objId
	 *            идентификатор на ресурс
	 * @param objType
	 *            тип на ресурс
	 */
	public SecuredResource(Object objId, ISecuredObjTypes objType) {
		this.objId = objId;
		this.objType = objType;
	}

	/**
	 * Стандартна проверка за еднаквост на текущата инстанция и друг обект,
	 * проверява се и за равенствто на съответните полета.
	 * 
	 * @see java.lang.Object#equals(java.lang.Object)
	 */
	@Override
	public boolean equals(Object obj) {
		if (this != obj) {
			if (obj != null) {
				try {
					SecuredResource other = (SecuredResource) obj;
					return (this.objId != null ? this.objId.equals(other.objId)
							: other.objId == null) && this.objType == other.objType;
				} catch (ClassCastException e) {
					return false;
				}
			}
			return false;
		}
		return true;
	}

	/**
	 * @return идентификатор на ресурса
	 */
	public Object getObjId() {
		return this.objId;
	}

	/**
	 * @return тип на ресурсa
	 */
	public ISecuredObjTypes getObjType() {
		return this.objType;
	}

	/**
	 * Хеш кода се формира като се взима под внимание идентификатора и типа на
	 * ресурса.
	 * 
	 * @see java.lang.Object#hashCode()
	 */
	@Override
	public int hashCode() {
		final int prime = 31;
		return prime * (prime + (this.objId == null ? 0 : this.objId.hashCode()))
				+ (this.objType == null ? 0 : this.objType.hashCode());
	}

}